package com.javaee.demov2.web.api;


import com.javaee.demov2.persistent.entity.Book;
import com.javaee.demov2.service.BookService;
import com.javaee.demov2.utils.bean.PageResult;
import com.javaee.demov2.utils.bean.SysConstants;
import com.javaee.demov2.utils.response.ResultVo;
import com.javaee.demov2.web.dto.book.BookAddDto;
import com.javaee.demov2.web.dto.book.BookQueryDto;
import com.javaee.demov2.web.dto.book.BookUpdateDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * 图书管理api接口类 使用Swagger
 */

// @Api：用于类上，表示该类是 Swagger 的资源，用于描述 API 资源的基本信息。
@Api(tags = "图书管理")
@Slf4j
@RestController
@RequestMapping("/book")
public class BookController {

    @Autowired
    BookService bookService;

    /**
     * 根据图书id查询图书信息
     */
    // @ApiOperation：用于方法上，描述一个 HTTP 请求的操作。
    @ApiOperation(value = "获取图书", notes = "根据图书id获取图书对象")
    @GetMapping("/{id}")
    public ResultVo<Book> getById(@PathVariable Long id) {
        Book book = bookService.getById(id);
        return ResultVo.ok(book);
    }


    /**
     * 新增图书
     */
    @ApiOperation(value = "新增图书", notes = "新增图书")
    @PostMapping("")
    public ResultVo add(@RequestBody BookAddDto bookAddDto) {
        bookService.add(bookAddDto);
        return ResultVo.ok();
    }

    /**
     * 删除
     */
    @ApiOperation(value = "删除图书", notes = "根据图书id删除图书对象")
    @DeleteMapping("/{id}")
    public ResultVo delete(@PathVariable Long id) {
        return bookService.removeById(id) ? ResultVo.ok() : ResultVo.fail();
    }

    /**
     * 更新
     */
    @ApiOperation(value = "更新图书", notes = "更新图书信息")
    @PutMapping("")
    public ResultVo update(@RequestBody BookUpdateDto bookUpdateDto) {
        bookService.update(bookUpdateDto);
        return ResultVo.ok();
    }

    /**
     * 多条件查询,分页返回查询结果
     */
    @ApiOperation(value = "多条件查询", notes = "多条件查询图书对象")
    @PostMapping("query")
    public ResultVo<PageResult> pageQuery(@RequestBody BookQueryDto bookQueryDto) {
        return ResultVo.ok(bookService.query(bookQueryDto));
    }

    /**
     * 判断是否存在相同的图书名接口
     */
    @ApiOperation(value = "是否存在相同的图书书号", notes = "判断是否存在相同的图书")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "图书名存在返回ture,不存在返回false"),})

    @PostMapping("isExistBookname")
    public ResultVo isExistBookISBN(@RequestParam String isbn) {
        boolean res = bookService.isExistBookISBN(isbn);
        return res ? ResultVo.ok(SysConstants.TRUE) : ResultVo.ok(SysConstants.FALSE);
    }

}
